// // 练习题：将树形嵌套数据恢复成扁平化数据
// const treeData = [
//   {
//     "name": "1",
//     "children": [
//       {
//         "name": "1.1",
//         "children": []
//       },
//       {
//         "name": "1.2",
//         "children": [
//           {
//             "name": "1.2.1",
//             "children": [
//               {
//                 "name": "1.2.1.1",
//                 "children": []
//               },
//               {
//                 "name": "1.2.1.2",
//                 "children": []
//               },
//               {
//                 "name": "1.2.1.3",
//                 "children": []
//               },
//             ]
//           }
//         ]
//       }
//     ]
//   },
//   {
//     "name": "2",
//     "children": []
//   }
// ]

// 扁平化处理后的数据格式：
// [
//   { name: '1.1' },
//   { name: '1.2.1.1' },
//   { name: '1.2.1.2' },
//   { name: '1.2.1.3' },
//   { name: '1.2.1' },
//   { name: '1.2' },
//   { name: '1' },
//   { name: '2' }
// ]

// 编程题1：必写
// 完成 treeToList(list) 函数的功能
// 实现对上述数据的扁平化处理，处理结果参考上文
function treeToList( treeData) {
  // ???
  let arr=[]
  for (const item of treeData) {
    const {children,...i}=item
    if(children&&children.length){
      arr=arr.concat(treeToList(children))
    }
    arr.push(i)
  }
  return arr

}
console.log(treeToList( treeData));


// 编程题2：必做
// 1, 1, 2, 3, 5, 8, 13, 21, 34, ....
// 写一个函数 fibo(n) ，函数只有一个入参n，n大于等于2，入参n表示斐波那契数列的第n项，
// 函数执行完成后返回有前n项构成的数列数组

// 用例1：
// 入参n = 4
// 执行函数 fibo(4) 返回：[1, 1, 2, 3]


// 用例2：
// 入参n = 6
// 执行函数 fibo(6) 返回：[1, 1, 2, 3, 5, 8]
// 最小功能模块：f(n) = f(n-1) + f(n-2)

function fibo(n = 2) {
  // ???
  let res=[]
  for (let i = 1; i <=n; i++) {
   if(i>2){
    let num=fibo(i-1)[fibo(i-1).length-1]+fibo(i-2)[fibo(i-2).length-1]
    res.push(num)
   }else{
    res.push(1)
   }
    
  }
  return res
}
console.log(fibo(6));


// 编程题3：选做
// 爬楼梯问题：非常经典，也是非常简单的动态规划问题
// 有一个n层的楼梯，小明需要爬到楼梯的顶层，每次只能上一节或者两节楼梯，问总共有多少种方法？
// 用例1: 当楼梯数 n = 2 时，一共有 2 种方法
// 用例2: 当楼梯数 n = 3 时，一共有 3 种方法
// 用例2: 当楼梯数 n = 30 时，一共有 ? 种方法
